broadway: Add clip node
authorAlexander Larsson <alexl@redhat.com>
Wed, 22 Nov 2017 16:40:39 +0000 (17:40 +0100)
committerAlexander Larsson <alexl@redhat.com>
Thu, 23 Nov 2017 09:48:29 +0000 (10:48 +0100)
gdk/broadway/broadway-protocol.h
gdk/broadway/broadway.js
gdk/broadway/broadwayd.c
gsk/gskbroadwayrenderer.c

index 5dd5ba354e4494244098c8b073bc2c201d17521c..7e8a37c59ef5b67362a8580233a615034551a260 100644 (file)
@@ -19,6 +19,7 @@ typedef enum { /* Sync changes with broadway.js */
   BROADWAY_NODE_LINEAR_GRADIENT = 7,
   BROADWAY_NODE_SHADOW = 8,
   BROADWAY_NODE_OPACITY = 9,
+  BROADWAY_NODE_CLIP = 10,
 } BroadwayNodeType;
 
 typedef enum {
index 8f056c3a1469e2e595136f21a1ab357ac444215e..9f9ca2357f9b6974e02f1b619c699ce37b88f63e 100644 (file)
@@ -628,6 +628,17 @@ SwapNodes.prototype.handle_node = function(parent, offset_x, offset_y)
         }
         break;
 
+    case 10:  // CLIP
+        {
+            var rect = this.decode_rect();
+            var div = document.createElement('div');
+            div.style["position"] = "absolute";
+            set_rect_style(div, rect, offset_x, offset_y);
+            div.style["overflow"] = "hidden";
+            parent.appendChild(div);
+            this.handle_node(div, rect.x, rect.y);
+        }
+        break;
 
     default:
         alert("Unexpected node type " + type);
index 7deb1142727bcca432f7992911e23f4aa7906669..50d71f521d76f07ffc76d2fc7d35ee6a11bbf7c3 100644 (file)
@@ -259,6 +259,10 @@ rewrite_node_textures (BroadwayClient *client,
     pos += NODE_SIZE_RRECT;
     pos = rewrite_node_textures (client, len, data, pos);
     break;
+  case BROADWAY_NODE_CLIP:
+    pos += NODE_SIZE_RECT;
+    pos = rewrite_node_textures (client, len, data, pos);
+    break;
   case BROADWAY_NODE_LINEAR_GRADIENT:
     pos += NODE_SIZE_RECT + 2 * NODE_SIZE_POINT;
     n_stops = data[pos++];
index f4fe8a998baf8c5238303fdda85edfe0eb9d5056..0838a7a69a52c1d53efee6d958d368235a4d2acd 100644 (file)
@@ -582,6 +582,15 @@ gsk_broadway_renderer_add_node (GskRenderer *self,
       }
       return;
 
+    case GSK_CLIP_NODE:
+      {
+        add_uint32 (nodes, BROADWAY_NODE_CLIP);
+        add_rect (nodes, gsk_clip_node_peek_clip (node));
+        gsk_broadway_renderer_add_node (self, nodes, node_textures,
+                                        gsk_clip_node_get_child (node));
+      }
+      return;
+
     case GSK_COLOR_MATRIX_NODE:
     case GSK_TEXT_NODE:
     default: